package com.cdp.web.controller.system.fileController;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.cdp.common.core.domain.AjaxResult;
import com.cdp.common.core.domain.entity.SysFileAudit;
import com.cdp.common.utils.uuid.IdUtils;
import com.cdp.system.dto.SaveDataDTO;
import com.cdp.system.service.ISysFileAuditService;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.web.bind.annotation.*;
import java.io.FileWriter;
import java.io.IOException;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;

@RestController
@RequestMapping("/excel")
public class ExcelDataController {

    @Autowired
    private ISysFileAuditService fileAuditService;



    /**
     * 格式校验测试
     */

    @PostMapping("/save/text")
    public AjaxResult saveDataText(@RequestBody SaveDataDTO saveDataDTO) {
        List<List<String>> data = saveDataDTO.getData();
        // 校验 data 中每个元素的格式
        for (List<String> item : data) {

            System.out.println("我是data的数据"+item);
            //数量检查
            if (item == null || item.size() != 3) {
                return AjaxResult.error("每条数据必须包含3个元素");

            }


            // 对第二个元素进行检查是否为有效的数字（阿拉伯数字或带小数点）
            String level2 = item.get(1);
            if (level2 == null || level2.trim().isEmpty()) {
                return AjaxResult.error("第二个元素不应为空或仅包含空白字符");
            }

            // 正则表达式解释：
            // ^-? 表示可选的负号
            // \d* 表示零个或多个数字
            // (\.\d+)? 表示可选的小数部分，以小数点开头后跟一个或多个数字
            // $ 表示字符串结束
            if (!level2.matches("^-?\\d*(\\.\\d+)?$")) {
                return AjaxResult.error("第二个元素应为有效的数字（可以是阿拉伯数字或带小数点）！");
            }

/*            //阿拉伯数字校验 好用
            String level2 = item.get(1);
            if (!level2.matches("^(?!0\\D)\\d+$")) {
                return AjaxResult.error("第二个元素应为有效的阿拉伯数字！");
            }*/




/*            // 对第二个元素进行检查是否为有效的小数并且精确到小数点后两位
            String decimalItem = item.get(1);
            if (decimalItem == null || decimalItem.trim().isEmpty()) {
                return AjaxResult.error("第二个元素不应为空或仅包含空白字符");
            }
            try {
                // 验证是否为有效的小数，并且保留两位小数
                BigDecimal bd = new BigDecimal(decimalItem).setScale(2, RoundingMode.HALF_UP);
                if (!bd.toString().equals(decimalItem)) {
                    return AjaxResult.error("第二个元素应为有效的小数（精确到小数点后两位）");
                }
            } catch (NumberFormatException e) {
                return AjaxResult.error("第二个元素应为有效的数字格式");
            }*/

/*
            //对类型进行检查是否为中 文文字 好用
            String chineseTextItem = item.get(1);
            if (!chineseTextItem.matches("[\\u4e00-\\u9fa5]+")) {
                return AjaxResult.error("第三个元素应为有效的中文文字");
            }*/

             //阿拉伯数字校验 好用
/*            String level2 = item.get(11);
            if (!level2.matches("^(?!0\\D)\\d+$")) {
                return AjaxResult.error("第二个元素应为有效的阿拉伯数字！");
            }*/





/*
            //对类型进行检查是为数字并且是否精确到小数点后二位
            String decimalItem = item.get(3);
            try {
                BigDecimal bd = new BigDecimal(decimalItem).setScale(2, RoundingMode.HALF_UP);
                if (!bd.toString().equals(decimalItem)) {
                    throw new IllegalArgumentException("第四个元素应为有效的小数（精确到小数点后两位）");
                }
            } catch (NumberFormatException e) {
                throw new IllegalArgumentException("第四个元素应为有效的小数（精确到小数点后两位）");
            }
*/





        }

        return AjaxResult.success(data);


    }





    /**
     * json文件存到服务器
     * @param saveDataDTO
     * @return
     */
    @PostMapping("/save")
    public AjaxResult saveData(@RequestBody SaveDataDTO saveDataDTO) {
        try {
            return fileAuditService.processAndSaveData(saveDataDTO);
        } catch (Exception e) {
            e.printStackTrace();
            return AjaxResult.error("保存失败：" + e.getMessage());
        }
    }




//    /**
//     * 保存文件到服务器
//     * @param data
//     * @return
//     */
//    @PostMapping("/save")
//    public AjaxResult saveData(@RequestBody List<List<String>> data,Integer tableName) {
//        if (data.isEmpty()) {
//
//            String passMessage = "未检测到数据，请重新上传";
//            AjaxResult result = new AjaxResult(607, passMessage, "操作成功");
//
//        }
//
//        // 动态生成文件名
//        //随机生成文件名 表示小时、分钟、秒和毫秒的时间戳+随机生成的 10 个数字组成。145102768 5575127712
//        String fileName = IdUtils.generateRandomNumber();
//
//        String filePath = uploadDir + "file" + fileName + ".json";
//        try (FileWriter fileWriter = new FileWriter(filePath)) {
//
//            fileWriter.write(data.toString());
//            fileWriter.flush();
//        } catch (IOException e) {
//            e.printStackTrace();
//            return AjaxResult.success("保存失败 ");
//        }
//
//        fileAuditService.saveFilsJson(filePath, tableName);
//
//
//        return AjaxResult.success("保存成功, 文件路径: " + filePath);
//    }


}
